// #include <bits/stdc++.h>
// using namespace std;
// class Solution
// {
// public:
//     vector<vector<int>> ans;
//     vector<int> path;
//     vector<vector<int>> subsets(vector<int> &nums)
//     {
//         dfs(nums, 0);

//         return ans;
//     }
//     void dfs(vector<int> &nums, int index)
//     {
//         if(index==nums.size())
//         {
//             ans.push_back(path);
//             return;
//         }
//         for (int i = 0; i < 2; i++)
//         {
//             if (i == 0)
//             {
//                 path.push_back(nums[index]);
//                 dfs(nums, index + 1);
//                 path.pop_back();
//             }
//             else
//                 dfs(nums, index + 1);
                
//         }
//     }
// };




#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    vector<vector<int>> ans;
    vector<int> path;
    vector<vector<int>> subsets(vector<int> &nums)
    {
        dfs(nums, 0);
        return ans;
    }
    //pos 代表我改层要从数组下标开始进行枚举
    void dfs(vector<int> &nums, int pos)
    {
        ans.push_back(path);
       for(int i=pos;i<nums.size();i++)
       {
            path.push_back(nums[i]);
            dfs(nums,i+1);
            path.pop_back();
       }
    }
};